package com.api.shopapi.common;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.oppo.push.server.Notification;
import com.oppo.push.server.Result;
import com.oppo.push.server.Sender;
import com.oppo.push.server.Target;

/**
 * oppo���Ͳ�����
 *
 */
public class Oppo {

    private static final String APP_KEY = "5bf169a49fde4251893884cde8b91932";
    private static final String MasterSecret = "8876d2d22ab84eb2a2cb72552b55b104";

    /**
     * ֪ͨ����Ϣtile
     */
    private static final String TITLE = "֪ͨ����Ϣtile";

    /**
     * ֪ͨ����Ϣ����
     */
    private static final String CONTENT = "֪ͨ����Ϣ����";



    /**
     * ����֪ͨ����Ϣ��
     *
     * @return
     */
    private static Notification getNotification() {
        Notification notification = new Notification();

        /**
         * ���²���������
         */
        notification.setTitle(TITLE);
        notification.setContent(CONTENT);

        //8.0��Ҫ����ͨ��
        notification.setChannelId("chat");


        /**
         * ���²����Ǳ���� �����Ҫʹ�ÿ��Բο�OPPO push�����api�ĵ���������
         */
        // subTitle - �ӱ��� ������֪ͨ��չʾ��֪ͨ������, ���Ǳ����������1~10����Ӣ�ľ���һ�����㡿
        notification.setSubTitle("sub tile");

        // App�������Զ�����ϢId��OPPO����ƽ̨���ݴ�ID��ȥ�ش������ڹ㲥������ͬappMessageIdֻ�ᱣ��һ�Σ����ڵ�����ͬappMessageIdֻ������һ��
        notification.setAppMessageId("test2345");

        // Ӧ�ý�����Ϣ�����ִ�Ļص�URL����������200���ڣ���Ӣ�ľ���һ������
        notification.setCallBackUrl("http://www.test.com");
        // App�������Զ����ִ��������������50���ڣ���Ӣ�ľ���һ������
        notification.setCallBackParameter("");

        // �����������0������Ӧ�ã�1����Ӧ����ҳ��activity��intent
        // action����2������ҳ��4����Ӧ����ҳ��activity�������Ǳ��Ĭ��ֵΪ0��;5,Intent scheme URL
        notification.setClickActionType(4);
        // Ӧ����ҳ��ַ��click_action_typeΪ1��4ʱ�������500��
        notification.setClickActionActivity("com.coloros.push.demo.component.InternalActivity");
        // ��ҳ��ַ��click_action_typeΪ2�������500��
        notification.setClickActionUrl("http://www.test.com");

        // ������������Ӧ����ҳ����ҳʱ���ݸ�Ӧ�û���ҳ��JSON��ʽ���Ǳ�����ַ������ܳ���4K��ʾ����{"key1":"value1","key2":"value2"}
        notification.setActionParameters("{\"key1\":\"value1\",\"key2\":\"value2\"}");

        // չʾ���� (0, ����ʱ��),(1, ����ʱ��)
        notification.setShowTimeType(1);
        // ��ʱչʾ��ʼʱ�䣨����time_zoneת���ɵ���ʱ�䣩��ʱ��ĺ�����
        notification.setShowStartTime(System.currentTimeMillis() + 1000 * 60 * 3);
        // ��ʱչʾ����ʱ�䣨����time_zoneת���ɵ���ʱ�䣩��ʱ��ĺ�����
        notification.setShowEndTime(System.currentTimeMillis() + 1000 * 60 * 5);

        // �Ƿ��������Ϣ,���Ǳ��Ĭ��ΪTrue��
        notification.setOffLine(true);
        // ������Ϣ�Ĵ��ʱ��(time_to_live) (��λ����), ��off_lineֵΪtrueʱ������3�졿
        notification.setOffLineTtl(24 * 3600);

        // ʱ����Ĭ��ֵ����GMT+08:00����������ۣ��¼���
        notification.setTimeZone("GMT+08:00");

        // 0������������ʽ, 1����wifi����
        notification.setNetworkType(0);

        return notification;
    }

    /**
     * ���͵���֪ͨ����Ϣ
     */
    public static void unicastNotification(String regId) {
        try {
            Sender sender = new Sender(APP_KEY, MasterSecret);
            // ����֪ͨ����Ϣ��
            Notification notification = getNotification();
            // �������Ͷ���
            Target target = Target.build(regId);
            // ���͵�����Ϣ
            Result result = sender.unicastNotification(notification, target);
            // ��ȡhttp����״̬��
            System.out.println(result.getStatusCode());
            // ��ȡƽ̨������
            System.out.println(result.getReturnCode());
            // ��ȡƽ̨���ص�messageId
            System.out.println(result.getMessageId());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void unicastNotification2(String regId,Notification notification) {
        try {
            Sender sender = new Sender(APP_KEY, MasterSecret);
            // ����֪ͨ����Ϣ��
            //Notification notification = getNotification();
            // �������Ͷ���
            Target target = Target.build(regId);
            // ���͵�����Ϣ
            Result result = sender.unicastNotification(notification, target);
            // ��ȡhttp����״̬��
            System.out.println(result.getStatusCode());
            // ��ȡƽ̨������
            System.out.println(result.getReturnCode());
            // ��ȡƽ̨���ص�messageId
            System.out.println(result.getMessageId());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }



    /**
     * ������������֪ͨ����Ϣ
     *
     * @param regIds
     *            ��Ҫ���͵�regId
     */
    public static void unicastBatchNotification(List<String> regIds) {
        try {
            Sender sender = new Sender(APP_KEY, MasterSecret);
            Map<Target, Notification> batch = new HashMap<Target, Notification>();
            // batch���Ϊ1000
            for (String regId : regIds) {
                batch.put(Target.build(regId), getNotification());
            }
            // ��������������Ϣ
            Result result_unicast = sender.unicastBatchNotification(batch);
            // ��ȡhttp����״̬��
            System.out.println(result_unicast.getStatusCode());
            // ��ȡƽ̨������
            System.out.println(result_unicast.getReturnCode());

            List<Result.UnicastBatchResult> batchResult = result_unicast.getUnicastBatchResults(); // �������ƽ��
            for (Result.UnicastBatchResult record : batchResult) {
                record.getErrorCode();
                record.getErrorMessage();
                record.getMessageId();
                record.getTargetValue();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * ���͹㲥��Ϣ
     */
    public static void broadcastNotification(String regIds) {
        try {
            Sender sender = new Sender(APP_KEY, MasterSecret);
            // ����֪ͨ����Ϣ��
            Notification broadNotification = getNotification();
            // ���ͱ�����Ϣ������
            Result saveResult = sender.saveNotification(broadNotification);
            // ��ȡhttp����״̬��
            System.out.println(saveResult.getStatusCode());
            // ��ȡƽ̨������
            System.out.println(saveResult.getReturnCode());
            // ��ȡmessageId
            String messageId = saveResult.getMessageId();
            // �����㲥Ŀ��
            Target target = new Target();
            target.setTargetValue(regIds);
            // ���͹㲥��Ϣ
            Result broadResult = sender.broadcastNotification(messageId, target);
            // ��ȡ�㲥taskId
            broadResult.getTaskId();
            List<Result.BroadcastErrorResult> errorList = broadResult.getBroadcastErrorResults();
            if (errorList.size() > 0) { // �����СΪ0����������Ŀ�귢�ͳɹ�
                for (Result.BroadcastErrorResult error : errorList) {
                    error.getErrorCode(); // ������
                    error.getTargetValue(); // Ŀ��
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
